package com.gskj.msmservice.controller;

import com.gskj.commonutils.ResultJson;
import com.gskj.msmservice.service.IMsmService;
import com.gskj.msmservice.utils.RandomUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @author :CodingFarmer_码农  Connor(康纳)_郭
 * @date : 10:07 20.5.21
 * @Company : http://www.gskj.com
 * @Version : 1.0
 * <p>
 * 短信发送 控制器
 */

@RestController
@RequestMapping("/edumsm/msm")
@CrossOrigin
public class MsmController {

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    @Autowired
    private IMsmService iMsmService;

    /***
     *   通过 手机号 发送 短信验证码
     * @param phone 手机号
     * @return
     */
    @GetMapping("/send/{phone}")
    public ResultJson sendMessage(@PathVariable("phone") String phone) {

        // 先从redis中获取 验证码
        String redisCode = redisTemplate.opsForValue().get(phone);

        // redis中有相对应的 验证码，直接返回。不在调用service发送验证码
        if(!StringUtils.isEmpty(redisCode)){
            return ResultJson.success();
        }

        // 当redis中没有相关验证码，在通过阿里发送短信验证码
        // 生成短信验证码。 6位数值
        String code = RandomUtil.getSixBitRandom();

        Map<String, Object> param = new HashMap<>();
        param.put("code", code); // 验证码

        // 调用service,发送短信方法
        boolean b = iMsmService.sendTextMessage(param,phone);

        if (b) {
            // 发送成功后。将验证码信息 存放到 redis中，方便下次调用
            // 同时设置redix中的超时时间 5分钟
            redisTemplate.opsForValue().set(phone, code,5, TimeUnit.MINUTES);

            return ResultJson.success();
        }
        return ResultJson.error().message("发送短信验证码失败!");
    }
}
